const byte interruptPin_0 = 25;  //这就是我们设置中断的目标对应的那个引脚
const byte interruptPin_1 = 23;  //我们设置两个中断来完成这个实验

volatile int interruptCounter = 0;  //0号中断发生中断的次数
volatile int interruptCounter_1 = 0;  //1号中断发生中断的次数

portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;  //声明一个portMUX_TYPE类型的变量，利用其对主代码和中断之间的同步进行处理
portMUX_TYPE mux_1 = portMUX_INITIALIZER_UNLOCKED;

void handleInterrupt() {
  portENTER_CRITICAL_ISR(&mux);
  delay(20);  //延时20ms作为消抖，如果是很稳定的中断可以不加或者加很少的消抖时间
  if(digitalRead(interruptPin_0) == 0)    //因为是下拉触发，所以在消抖时间完后读取引脚高低电平，如果还是为低那么就代表出现了一次稳定的中断
  {
    interruptCounter++;
    Serial.println("0号中断对应的引脚发生中断！！！");
    Serial.print("0号中断发生次数：");Serial.println(interruptCounter);
  } 
  portEXIT_CRITICAL_ISR(&mux);

}

void handleInterrupt_1() {
  portENTER_CRITICAL_ISR(&mux_1);
  delay(20);  //延时20ms作为消抖，如果是很稳定的中断可以不加或者加很少的消抖时间
  if(digitalRead(interruptPin_1) == 1)  //因为是上拉触发，所以在消抖时间完后读取引脚高低电平，如果还是为高那么就代表出现了一次稳定的中断
  {
    interruptCounter_1++;
    Serial.println("1号中断对应的引脚发生中断！！！");
    Serial.print("1号中断发生次数：");Serial.println(interruptCounter_1);
  }
  portEXIT_CRITICAL_ISR(&mux_1);
}

void setup() {
  Serial.begin(115200);
  Serial.println("中断测试实验"); 
  pinMode(interruptPin_0, INPUT_PULLUP);  //先把引脚设置为上拉输入模式
  pinMode(interruptPin_1, INPUT_PULLDOWN);  //这个我们设置为下拉
  //我们通过调用attachInterrupt函数将中断附加到引脚
  //handleInterrupt 是中断触发后的触发函数
  //FALLING 代表下拉触发，也就是由高电平向低电平转化时触发  RISING当然就是上拉触发
  attachInterrupt(digitalPinToInterrupt(interruptPin_0), handleInterrupt, FALLING);
  attachInterrupt(digitalPinToInterrupt(interruptPin_1), handleInterrupt_1, RISING);
}

void loop() {

}
